home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
53695
/
53695.xpi
/
content
/
tinytweet.js
< prev
Wrap
Text File
|
2009-12-29
|
9KB
|
254 lines
window.addEventListener("load", function() { progressListener.init(); }, false);
var progressListener = {
init: function() {
document.getElementById("appcontent").addEventListener("DOMContentLoaded", this.onPageLoad, true);
},
onPageLoad: function(aEvent) {
if (aEvent.target.defaultView.window == aEvent.target.defaultView.window.parent) {
Chitika.Tweeter.initiate( aEvent.originalTarget );
}
}
}
// Initiate Chitika Engine
if(!window.Chitika){ Chitika = {}; }
// Create Module
Chitika.Tweeter = {};
// Configuration
var clickX, clickY;
var tooltipOffsetX = 20;
var tooltipOffsetY = 15;
var minChars = 5;
var maxChars = 1000;
var ffExtVer = "1.3";
var processURL = "http://labs.chitika.com/TinyTweet/tweet.php?ffext=" + ffExtVer + "&q=";
var lastSelection = "";
var tinyTweetMouseOver = false;
var tinyTweetLink = ""; // URL for to-be-clicked link
var tinyTweetLastLink = "";
var tinyTweetWindow = null;
/******* Initiate Tweeter *******/
Chitika.Tweeter.initiate = function (doc) {
(function(loader){
loader.loadSubScript("chrome://tinytweet/content/jquery-1.3.2.js");
})(
Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(
Components.interfaces.mozIJSSubScriptLoader
)
);
// Setup workspace
Chitika.Tweeter.setup(doc);
// Register Registers (heh :D)
jQuery(doc).mousedown(function(e) { Chitika.Tweeter.register(e, doc); });
// Register Processing
jQuery(doc).mouseup(function(e) { Chitika.Tweeter.process(e,doc); });
// Register Mouse Overs
jQuery(".tweeterHover", content.document).hover(
function () { tinyTweetMouseOver = true; },
function () { tinyTweetMouseOver = false; }
);
// Register Clicking
jQuery(".tweeterLink", content.document).click(function() {
// Link-Check
if (tinyTweetLastLink != tinyTweetLink) {
tinyTweetLastLink = tinyTweetLink;
// Close window if opened
if (tinyTweetWindow != null && !tinyTweetWindow.closed) {
tinyTweetWindow.close();
}
// Open new window
tinyTweetWindow = window.open(tinyTweetLink, "tinyTweetWindow", "chrome,width=800,height=600,resizable=yes");
tinyTweetWindow.focus();
}
// Hide Link
//jQuery(".tweeterHover", content.document).fadeOut(1000);
jQuery(".tweeterHover", content.document).css("display", "none");
});
}
/******* URL Encode/Decode *******/
Chitika.Tweeter.urlencode = function (str) {
return escape(str).replace(/\+/g, '%2B').replace(/%20/g,'+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/\@/g, '%40');
}
Chitika.Tweeter.urldecode = function (str) {
return unescape(str.replace(/\+/g, ' '));
}
/******* Process Seleted Text *******/
Chitika.Tweeter.process = function(e, doc){
// Get Selection, convert to string & trim it
var focusedWindow = document.commandDispatcher.focusedWindow;
var selection = focusedWindow.getSelection().toString().replace(/^\s+|\s+$/g,"");
// Get selection, convert to string & trim it
if (lastSelection == selection) { return; } else { lastSelection = selection; }
if(selection != "" && selection.length >= minChars && selection.length <= maxChars) {
var diffX = (clickX + e.pageX) / 2;
var diffY = (clickY + e.pageY) / 2;
/*
// Check if clean
if (selection.indexOf(";") == -1 && selection.indexOf("<") == -1 &&
selection.indexOf(">") == -1 && selection.indexOf("(") == -1 &&
selection.indexOf(")") == -1 ) {
// Complete selection
selection = Chitika.Tweeter.completeSelection(selection);
}
*/
// Set X
if (diffX > 0) { jQuery(".tweeterHover", content.document).css("left", diffX - tooltipOffsetX);
} else if (diffX < 0) { jQuery(".tweeterHover", content.document).css("left", diffX + tooltipOffsetX);
} else { jQuery(".tweeterHover", content.document).css("left", e.pageX + tooltipOffsetX); }
// Set Y
jQuery(".tweeterHover", content.document).css("top", e.pageY + tooltipOffsetY);
// Generate URL
tinyTweetLink = processURL + Chitika.Tweeter.urlencode(selection);
// Fade In
//jQuery(".tweeterHover", content.document).fadeIn("slow");
jQuery(".tweeterHover", content.document).css("display", "block");
}
}
/******* Complete user-made selection (prev/next chars) *******/
Chitika.Tweeter.completeSelection = function(str) {
// Find Container
var container = jQuery('*:contains("'+str+'"):last', content.document);
if (container.length == 0) return str;
// Capture, convert and trim text.
container = $(container).html().toString().replace(/^\s+|\s+$/g,"").replace(/\t/g,"");
var findIndex = container.indexOf(str);
if (findIndex == -1) return str;
// Config
maxTries = 15;
// Attempt previous
var prevTry = true, prevStr = "", prevChar = "", charCount = 0;
do {
prevChar = container.substr(findIndex - (charCount += 1), 1)
//console.debug("Previous: Looping on " + charCount + " -- char = [" + prevChar + "] | prevStr = " + prevStr + " SUm => " + (findIndex - charCount) + " | Index => " + findIndex);
if (prevChar != " " && prevChar != ">" && charCount <= maxTries && (findIndex - charCount) >= 0) {
prevStr = prevChar + prevStr;
} else { prevTry = false; }
} while (prevTry);
// Attempt next
var nextTry = true, nextStr = "", nextChar = "", charCount = -1;
do {
nextChar = container.substr(findIndex + str.length + (charCount += 1), 1)
//console.debug("Next: Looping on " + charCount + " -- char = " + nextChar + " | nextStr = " + nextStr);
if (nextChar != " " && nextChar != "<" && nextChar != "" && nextChar != "," && charCount <= maxTries) {
nextStr += nextChar;
} else { nextTry = false }
} while (nextTry);
// Compile and return
return prevStr + str + nextStr;
}
/******* Register Initial Click / Fadeout *******/
Chitika.Tweeter.register = function(e, doc) {
// Record initial click positions
clickX = e.pageX;
clickY = e.pageY;
// Fade out
//jQuery(".tweeterHover", content.document).hide("slow");
if (tinyTweetMouseOver == false) jQuery(".tweeterHover", content.document).css("display", "none");
}
/******* Setup Workstation *******/
Chitika.Tweeter.setup = function(doc){
// Generate Elements
var tweeterHover = jQuery("<div>")
.css("z-index","99999")
.css("width", "114px")
.css("height", "47px")
.css("background-image", "url('chrome://tinytweet/content/bg.png')")
.css("position", "absolute")
.css("display", "none")
.addClass("tweeterHover");
var tweeterBody = jQuery("<div>")
.css("width", "100px")
.css("height", "25px")
.css("margin", "15px 7px 0px 7px");
var tweeterIcon = jQuery("<div>")
.css("padding", "4px")
.css("float", "left");
var tweeterText = jQuery("<div>")
.css("padding", "5px 0px 0px 5px")
.css("float", "left")
.css("color", "#2276BB")
.css("cursor", "pointer");
var tweeterIMG = jQuery("<img>")
.css("height", "16px")
.css("width", "16px")
.css("background-image", "url('chrome://tinytweet/content/icon.png')");
var tweeterLink = jQuery("<a>")
.attr("href", "#")
.text("Tweet this")
.css("font-size","12px")
.addClass("tweeterLink");
var tweeterStyle = "";
tweeterStyle += ".tweeterHover { color:#2276BB !important; font-size: 12px; }";
tweeterStyle += ".tweeterHover a:link { color:#2276BB !important; text-decoration:none !important; }";
tweeterStyle += ".tweeterHover a:visited { color:#2276BB !important; text-decoration:none !important; }";
tweeterStyle += ".tweeterHover a:hover { color:#2276BB !important; text-decoration:underline !important; }";
tweeterStyle += ".tweeterHover a:active { color:#2276BB !important; text-decoration:none !important; }";
tweeterStyle += ".tweeterHover { margin: 0; padding: 0; border: 0; font-size: 100%; line-height: 1; list-style: none; }";
tweeterStyle += ".tweeterHover { font: 12px 'Lucida Grande', Verdana, Verdana, Arial, Helvetica, sans-serif; }";
// Compile set
tweeterHover.append(tweeterBody);
tweeterBody.append(tweeterIcon);
tweeterIcon.append(tweeterIMG);
tweeterBody.append(tweeterText);
tweeterText.append(tweeterLink);
// Add Style
jQuery(doc.body).prepend('<style type="text/css">'+tweeterStyle+'</style>');
// Finally, append all to body
jQuery(doc.body).prepend(tweeterHover);
// Ensure color on link element
jQuery('.tweeterLink', content.document).css('color', '#2276BB');
jQuery('.tweeterLink', content.document).hover( function(){
$(this).css("font-size","12px");
$(this).css('color', '#2276BB');
}, function(){
$(this).css("font-size","12px");
$(this).css('color', '#2276BB');
});
}